/* Copyright (c) Microsoft Corporation                                       */
/*                                                                           */
/* All rights reserved.                                                      */
/*                                                                           */
/* Licensed under the Apache License, Version 2.0 (the "License"); you may   */
/* not use this file except in compliance with the License.  You may obtain  */
/* a copy of the License at http://www.apache.org/licenses/LICENSE-2.0       */
/*                                                                           */
/* THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS     */
/* OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION      */
/* ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR   */
/* PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.                              */
/*                                                                           */
/* See the Apache Version 2.0 License for specific language governing        */
/* permissions and limitations under the License.                            */
/*                                                                           */
#pragma once

#include "zftp_hash_lookup_protocol.h"
#include "ZLookupRequest.h"
#include "ZNameRecord.h"
#include "SocketFactory.h"
#include "ZLCEmit.h"
#include "ThreadFactory.h"

class ZCache;

class ZLookupServer {
public:
	ZLookupServer(ZCache *zcache, UDPEndpoint *listen_lookup, ZLCEmit *log_paths_emitter, SocketFactory *sf, ThreadFactory *tf);

	void send_reply(ZLookupRequest *req, ZNameRecord *name_record);

private:
	ZLookupRequest *_receive();
	static void _run_inner_s(void *v_this);
	void _run_inner();

	ZCache *zcache;
	ZLCEmit *ze;
	AbstractSocket *socket;
	ZLCEmit *log_paths_emitter;
};
